/* 
功能：
当数据变化触发依赖，dep通知所欲的Watcher实例更新视图
自身实例化的时候往dep对象中添加自己

cb:指名如何更新视图
key data中的属性名称
vm vue实例
oldValue:记录数据变化前的值
updata(){} 如果数据发生变化调用cb函数，更新视图
*/
class Watcher {
    constructor(vm,key,cb){
        this.vm = vm
        //data中的属性名称
        this.key = key
        //回调函数负责更新视图
        this.cb = cb

        //把watcher对象记录到dep类的静态属性target中
        Dep.target = this
        //当访问属性时，触发get方法，在get方法中调用addSub
        this.oldValue = vm[key]
        Dep.target = null
    }
    //当数据发生变化的时候更新视图
    update(cb){
        let newValue = this.vm[this.key]
        if(this.oldValue === newValue){
            return
        }
        this.cb(newValue)
    }
}